﻿using Domain.Enums;
using Domain.Models;
using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Diagnostics.Contracts;
using TouchSocket.Sockets;

namespace Domain
{
    public static class Consts
    {

        public static ConcurrentDictionary<string, string> DeviceToSocketId = new();

        /// <summary>
        /// 可多线程访问的心跳成功的设备集合
        /// </summary>
        public static ConcurrentDictionary<string, Device> devices = new();


        public static readonly byte StartByte = 0xA5;
        public static readonly byte EndByte = 0x5A;

        public static Dictionary<DataType, byte> CommandPackageLength = new()
        {

            //没有   修改服务器ip命令下,设备位置上报上,广告更新命令下

            {
                DataType.出酒命令下,0x0C
            },
            {
                DataType.设备应答出酒命令上,0x11
            },
            {
                DataType.设备出酒完成上报上,0x0C
            },
            {
                DataType.平台应答出酒完成上报下,0x0B
            },
            {
                DataType.设备暂停或继续出酒上报上,0x0D
            },
            {
                DataType.查询设备命令下,0x09
            },
            {
                DataType.设备应答查询上,0x0F
            },
            {
                DataType.设备开锁命令下,0x09
            },
            {
                DataType.设备开锁应答上,0x0A
            },
            {
                DataType.修改IP应答上,0x0A
            },
            {
                DataType.设备到服务器心跳包上,0x09
            },
            {
                DataType.心跳包应答下,0x09
            },
            {
                DataType.校准出酒命令下,0x09
            },
            {
                DataType.校准出酒应答上,0x0A
            },
            {
                DataType.校准实际出酒命令下,0x0A
            },
            {
                DataType.校准实际出酒应答上,0x0A
            },
            {
                DataType.位置信息上报应答下,0x09
            },
            {
                DataType.取消出酒命令上,0x0A
            },
            {
                DataType.应答取消出酒命令下,0x0A
            },
            {
                DataType.更改设备ID号下,0x09
            },
            {
                DataType.应答更改设备ID号上,0x09
            },
            {
                DataType.远程升级固件下,0x09 
            },
            { DataType.远程升级固件应答上,0x0A},
            {DataType.定时开关机下,0x0D },
            { DataType.定时开关机应答上,0x0A},
            { DataType.通道校准出酒下,0x0A},
            {DataType.通道校准出酒应答上,0x0B },
            { DataType.通道校准时实际出酒命令下,0x0B},
            { DataType.通道校准时实际出酒应答上,0x0B},
            { DataType.通道刷卡上报命令,0x0E},
            {DataType.通道刷卡应答下,0x0B },
            {DataType.广告更新应答上,0x0C }

        };


        #region Device Server

        public static ConcurrentDictionary<string, List<ISocketClient>> DeviceToApiSocket = new();

        #endregion
    }
}
